package com.quanyan.place.wrapper;

import com.quanyan.api.APIResponse;
import com.quanyan.common.Plugin.PageObj;
import com.quanyan.place.entity.Dict;
import com.quanyan.place.entity.TbBizPlaceMemberCard;
import com.quanyan.place.entity.apireq.*;
import com.quanyan.place.entity.apiresp.*;
import com.quanyan.place.entity.vo.ReqPlaceMemberSearch;
import com.quanyan.place.web.api.ApiPlaceBizController;
import com.sun.org.apache.regexp.internal.RE;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * Created by yangyun on 16-8-25.
 */
public interface PlaceGoodsWrapper {

    APIResponse getPlaceGoodsList(ReqPlaceGoodsVo reqPlaceGoodsVo);

    APIResponse getPlaceGoodsListNew(ReqPlaceGoodsVo reqPlaceGoodsVo);

     /* APIResponse insertPlaceGoodsInfo(ReqPlaceGoodsVo reqPlaceGoodsVo);*/

    APIResponse insertInventoryRecord(ReqPlaceGoodsVo reqPlaceGoodsVo);

    APIResponse insertPlaceGoodsInfo(ReqPlaceGoodsVo reqPlaceGoodsVo);

    APIResponse insertPlaceGoodsInfoNew(ReqPlaceGoodsVo reqPlaceGoodsVo);

    APIResponse updatePlaceGoodsInfo(ReqPlaceGoodsVo reqPlaceGoodsVo);

    APIResponse updatePlaceGoodsInfoNew(ReqPlaceGoodsVo reqPlaceGoodsVo);

    void  deletePlaceGoodsInfo(ReqPlaceGoodsVo reqPlaceGoodsVo);

    APIResponse exportPlaceGoodsInfo(ReqPlaceGoodsVo reqPlaceGoodsVo);

    APIResponse exportPlaceGoodsInfoNew(ReqPlaceGoodsVo reqPlaceGoodsVo);

    APIResponse importPlaceGoodsInfo(ReqPlaceGoodsVo reqPlaceGoodsVo);

    APIResponse insertPlaceGoodsTypeData(ReqPlaceGoodsTypeVo reqPlaceGoodsTypeVo);

    APIResponse getPlaceGoodsTypeData(ReqPlaceGoodsTypeVo reqPlaceGoodsTypeVo);

    /*APIResponse getPlaceGoodsTypeList(ReqPlaceGoodsTypeVo reqPlaceGoodsTypeVo);*/

    APIResponse getPlaceGoodsTypeList(ReqPlaceGoodsTypeVo reqPlaceGoodsTypeVo);

    APIResponse updatePlaceGoodsTypeData(ReqPlaceGoodsTypeVo reqPlaceGoodsTypeVo);

   /* APIResponse updatePlaceGoodsTypeDatassss(ReqPlaceGoodsTypeVo reqPlaceGoodsTypeVo);*/

    APIResponse submitGoodsOrder(ReqPlaceGoodsVo reqPlaceGoodsVo,PlaceOrderServiceWrapper placeOrderServiceWrapper);

    APIResponse goodsSaleIncomeReport(ReqPlaceGoodsVo reqPlaceGoodsVo);

    APIResponse inventoryRecordList(ReqPlaceGoodsVo reqPlaceGoodsVo);



    /**
     * 商品售卖会员卡消费获取用户所有相关会员卡
     */
    APIResponse<List<RespPlaceMemberCard>> goodsConsumeGetMemberCardList(ReqPlaceGoodsVo reqPlaceGoodsVo);

    APIResponse getOneLevel(String dataKey);

    APIResponse getTypeByParenLevel(ReqPlaceGoodsVo reqPlaceGoodsVo);


    /**
     * 商品销售明细
     *
     * @param map
     * @return
     */
    APIResponse<PageObj<RespPlaceGoodsDetailSum>> getGoodsDetail(@Param("map")Map<String,Object> map);


    APIResponse saveSupplierInfo (ReqSupplierVo reqSupplierVo);

    APIResponse getSupplierInfoList(ReqSupplierVo reqSupplierVo);

    APIResponse deleteSupplierInfo(ReqSupplierVo reqSupplierVo);

    APIResponse updateSupplierInfo(ReqSupplierVo reqSupplierVo);

    APIResponse getSupplierNameByCityId(Integer cityId);

    APIResponse checkGoodsInventory(ReqPlaceGoodsVo reqPlaceGoodsVo);

    APIResponse goodsTradeRecord(ReqPlaceGoodsVo reqPlaceGoodsVo);


    /**
     * 商品销售明细导出
     *
     * @param map
     * @return
     */
    APIResponse<RespPlaceGoodsDetailSum> getGoodsDetailExport(@Param("map")Map<String,Object> map);

    /**
     * 商品销售统计 -商品编号
     * @param map
     * @return
     */
    APIResponse<?> getGoodsStatisticsByGoodsId(@Param("map")Map<String, Object> map);

    /**
     * 商品销售统计 -一级目录
     * @param map
     * @return
     */
    APIResponse<?> getGoodsStatisticsByOneLevel(@Param("map")Map<String, Object> map);

    /**
     * 商品销售统计 -二级目录
     * @param map
     * @return
     */
    APIResponse<?> getGoodsStatisticsByTwoLevel(@Param("map")Map<String, Object> map);

    /**
     * 商品销售统计 -散客会员
     * @param map
     * @return
     */
    APIResponse<?> getGoodsStatisticsByMember(@Param("map")Map<String, Object> map);

    /**
     * 商品销售统计 -商品编号(导出)
     * @param map
     * @return
     */
    APIResponse<?> getGoodsStatisticsByGoodsIdExport(@Param("map")Map<String, Object> map);

    /**
     * 商品销售统计 -一级目录(导出)
     * @param map
     * @return
     */
    APIResponse<?> getGoodsStatisticsByOneLevelExport(@Param("map")Map<String, Object> map);

    /**
     * 商品销售统计 -二级目录(导出)
     * @param map
     * @return
     */
    APIResponse<?> getGoodsStatisticsByTwoLevelExport(@Param("map")Map<String, Object> map);

    APIResponse<?> insertGoodsOperateRecord(ReqPlaceGoodsVo reqPlaceGoodsVo);

    APIResponse<?> getGoodsTypeAndGoodsCount(ReqPlaceGoodsVo reqPlaceGoodsVo);

    /**
     * 统一商品库（新增商品类型）
     * @param map
     * @return
     */
    APIResponse<?> insertGoodsCommonType(@Param("map")Map<String, Object> map);

    /**
     * 统一商品库（更新商品类型）
     * @param map
     * @return
     */
    APIResponse<?> updateGoodsCommonType(@Param("map")Map<String, Object> map);

    /**
     * 统一商品库（商品类型列表）
     * @param map
     * @return
     */
    APIResponse<?> goodsTypeCommonList(@Param("map")Map<String, Object> map);

    /**
     * 统一商品库信息（新增商品）
     * @param reqPlaceGoodsCommonVo
     */
    APIResponse<?> insertGoodsCommon(ReqPlaceGoodsCommonVo reqPlaceGoodsCommonVo);

    /**
     * 统一商品库信息（更新商品）
     * @param reqPlaceGoodsCommonVo
     */
    APIResponse<?> updateGoodsCommon(ReqPlaceGoodsCommonVo reqPlaceGoodsCommonVo);

    /**
     * 统一商品库信息（商品列表）
     * @param map
     * @return
     */
    APIResponse<?> goodsCommonList(@Param("map")Map<String, Object> map);


    APIResponse<?> getTypeCommonByParentLevel(@Param("map")Map<String, Object> map);

    /**
     * 批量入库
     * @param reqPlaceGoodsVo
     * @return
     */
    APIResponse<?> insertInventoryRecordBatch(ReqPlaceGoodsVo reqPlaceGoodsVo);

    /**
     * 批量盘点库存
     * @param reqPlaceGoodsVo
     * @return
     */
    APIResponse<?> checkGoodsInventoryBatch(ReqPlaceGoodsVo reqPlaceGoodsVo);

    APIResponse<?> updownGoods(ReqPlaceGoodsVo reqPlaceGoodVo);

    APIResponse<?> getGoodsInfoByBarCode(ReqPlaceGoodsVo reqPlaceGoodVo);

    APIResponse<?> insertGoodsAndList(@Param("map")Map<String, Object> map);
}
